package com.jxd.ordering.service;

import com.jxd.ordering.exception.serviceexception.AccountExistException;
import com.jxd.ordering.exception.serviceexception.PwdErrorException;
import com.jxd.ordering.exception.serviceexception.UserNotFoundException;
import com.jxd.ordering.model.User;

import java.util.Map;

public interface IUserService {
    /**
     * 新增用户信息
     *
     * @param user 用户实体类
     * @return 是否新增成功
     */
    boolean addUser(User user) throws AccountExistException;

    /**
     * 修改用户信息
     *
     * @param user 用户实体类
     * @return 是否修改成功
     */
    boolean editUser(User user);

    /**
     * 修改密码
     *
     * @param userid 用户id
     * @param pwd    新密码
     * @return 是否修改成功
     */
    boolean editPassword(int userid, String pwd);

    /**
     * 批量删除用户信息
     *
     * @param userids 用户编号数组
     * @return 是否删除成功
     */
    boolean delUser(int[] userids);

    /**
     * 分页查询全部餐品信息
     *
     * @param queryMap 包含int page, int limit, String uname, int type（1用户 2管理员）
     * @return 查询结果
     */
    Map<String, Object> getUserByPage(Map<String, String> queryMap);

    /**
     * 按用户id查询用户信息
     *
     * @param userid 用户编号
     * @return 查询结果
     */
    Map<String, Object> getUserByUserid(int userid);

    /**
     * 按用户名查询用户信息
     *
     * @param account 用户名
     * @return 查询结果
     */
    User getUserByAccount(String account);

    /**
     * 按用户id查询用户权限等级
     *
     * @param userid 用户编号
     * @return 查询结果
     */
    String getPermissionByUserid(int userid);

    /**
     * 按用户id查询用户编号
     *
     * @param userid 用户id
     * @return 查询结果
     */
    int getUsernoByUserid(int userid);

    /**
     * 按用户id查询用户部门编号
     *
     * @param userid 用户编号
     * @return 查询结果
     */
    int getDeptnoByUserid(int userid);

    /**
     * 登录
     *
     * @param uname 用户名
     * @param pwd   密码
     * @return 用户信息 包含 uname, permission, headshot, userno, token
     */
    Map<String, Object> login(String uname, String pwd) throws UserNotFoundException, PwdErrorException;

    /**
     * 注册
     *
     * @param map 包含 uname,pwd, ename,sex,tel,deptno,job
     * @return 用户信息 包含 account,pwd
     */
    Map<String, Object> register(Map<String, String> map) throws AccountExistException;
}
